package com.zg.invoice.vo;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.math.BigDecimal;

@Data
@ApiModel(value = "开票回调明细入参", description = "开票回调明细信息对象")
public class OpenInvoiceDetails {
    private static final long serialVersionUID=1L;

    /**
     * 明细序号
     */
    @ApiModelProperty(value = "明细序号")
    private Integer detailIndex;

    /**
     * 明细行性质:0,正常行;1,折扣行;2,被折扣行
     */
    @ApiModelProperty(value = "明细行性质")
    private Integer detailType;

    /**
     * 商品编码
     */
    @ApiModelProperty(value = "商品编码")
    private String commodityCode;


    /**
     * 商品名称
     */
    @ApiModelProperty(value = "商品名称")
    private String goodsName;


    /**
     * 含税标志，0:不含税,1:含税
     */
    @ApiModelProperty(value = "含税标志，0:不含税,1:含税")
    private Integer withTaxFlag;

    /**
     * 含税单价，
     * 当含税标志为：含税且不含税金额、税额、含税金额未全部传入时，必填，数量和单价必须都不填或者都必填，不可只填一个。
     * 建议保留小数点后8位以上，减少计算误差。
     */
    @ApiModelProperty(value = "含税单价")
    private BigDecimal goodsPrice;

    /**
     * 不含税单价，当含税标志为：不含税且不含税金额、税额、含税金额未全部传入时，必填，数量和单价必须都不填或者都必填，不可只填一个。建议保留小数点后8位。
     */
    @ApiModelProperty(value = "不含税单价")
    private BigDecimal taxFreePrice;

    /**
     * 数量，数量、单价必须都不填，或都必填，不可只填一个；
     * 当数量、单价都不填时，不含税金额、税额、含税金额都必填；当数量、单价都填时，不含税金额、税额、含税金额可为空。建议保留小数点后8位以上
     */
    @ApiModelProperty(value = "数量")
    private BigDecimal goodsNum;

    /**
     * 税率
     */
    @ApiModelProperty(value = "税率")
    private String taxrate;

    /**
     * 规格型号
     */
    @ApiModelProperty(value = "规格型号")
    private String specType;

    /**
     * 单位，开具成品油发票时必填，必须为”升”或“吨”。
     */
    @ApiModelProperty(value = "单位")
    private String goodsUnit;

    /**
     * 税收分类编码
     */
    @ApiModelProperty(value = "税收分类编码")
    private String goodsCode;

    /**
     * 自行编码
     */
    @ApiModelProperty(value = "自行编码")
    private String selfCode;

    /**
     * 优惠政策标识，0:不使用;1:使用;默认为:0,不使用
     * 全电发票时为空，仅传入优惠政策编码即可
     */
    @ApiModelProperty(value = "优惠政策标识")
    private Integer favouredPolicyFlag;

    /**
     * 优惠政策内容，如：即征即退、免税、不征税、简易征收等
     * 全电发票时为空，仅传入优惠政策编码即可
     * favouredPolicyFlag为1时，此项必填
     */
    @ApiModelProperty(value = "优惠政策内容")
    private String favouredPolicyName;

    /**
     * 零税率标识，空:非零税率;1:免税;2:不征税;3:普通零税率。
     * 全电发票时为空，仅传入优惠政策编码即可
     *
     * 普通零税率，对应传值：
     * favouredPolicyFlag:0
     * zeroRateFlag:3
     * favouredPolicyName:
     *
     * 免税时，对应传值：
     * favouredPolicyFlag:1
     * zeroRateFlag:1
     * favouredPolicyName:“免税”
     *
     * 不征税，对应传值：
     * favouredPolicyFlag:1
     * zeroRateFlag:2
     * favouredPolicyName:“不征税”
     */
    @ApiModelProperty(value = "零税率标识")
    private Integer zeroRateFlag;



    /**
     * 扣除额，小数点后两位。差额征收的发票目前只支持一行明细。不含税差额 = 不含税金额 - 扣除额； 税额 = 不含税差额*税率
     * 注意：传空或字段不传，都表示非差额征税；传0.00才表示差额征税:0.00
     */
    @ApiModelProperty(value = "扣除额")
    private BigDecimal deduction;

    /**
     * 不含税金额
     * 精确到小数点后面两位，红字发票为负数。不含税金额、税额、含税金额任何一个不传时，会根据传入的单价，数量进行z计算，可能和实际数值存在误差，建议都传入
     */
    @ApiModelProperty(value = "不含税金额")
    private BigDecimal taxFreeAmount;

    /**
     * 税额
     * 精确到小数点后面两位，红字发票为负数。不含税金额、税额、含税金额任何一个不传时，会根据传入的单价，数量进行计算，可能和实际数值存在误差，建议都传入
     */
    @ApiModelProperty(value = "税额")
    private BigDecimal tax;

    /**
     *含税金额
     * 精确到小数点后面两位，红字发票为负数。不含税金额、税额、含税金额任何一个不传时，会根据传入的单价，数量进行计算，可能和实际数值存在误差，建议都传入
     */
    @ApiModelProperty(value = "含税金额")
    private BigDecimal taxAmount;

    /**
     * 优惠政策编码
     * 全电发票特有字段，如使用优惠政策时，该字段必填。
     * 01：简易征收 02：稀土产品 03：免税 04：不征税 05：先征后退 06：100%先征后退 07：50%先征后退 08：按3%简易征收 09：按5%简易征收
     * 10：按5%简易征收减按1.5%计征 11：即征即退30% 12：即征即退50% 13：即征即退70% 14：即征即退100% 15：超税负3%即征即退
     * 16：超税负8%即征即退 17：超税负12%即征即退 18：超税负6%即征即退
     */
    @ApiModelProperty(value = "优惠政策编码")
    private String favouredPolicyCode;

    /**
     *商品简称
     */
    @ApiModelProperty(value = "商品简称")
    private String goodsCodeAbb;

    /**
     *自定义字段1
     */
    @ApiModelProperty(value = "自定义字段1")
    private String columnFirst;

    /**
     *自定义字段2
     */
    @ApiModelProperty(value = "自定义字段2")
    private String columnSecond;

    /**
     *自定义字段3
     */
    @ApiModelProperty(value = "自定义字段3")
    private String columnThree;

    /**
     *自定义字段4
     */
    @ApiModelProperty(value = "自定义字段4")
    private String columnFour;

    /**
     *自定义字段5
     */
    @ApiModelProperty(value = "自定义字段5")
    private String columnFive;

    /**
     * 煤炭种类：0100 - 政府保供煤，0300 - 市场煤，0201 - 长协煤-协议期不足半年，0202 - 长协煤-协议期在半年至一年之间，0203 - 长协煤-协议期在一年至两年之间，0204 - 长协煤-协议期在两年以上
     */
    @ApiModelProperty(value = "煤炭种类")
    private String mtzl;


    @Override
    public String toString() {
        return "OpenInvoiceDetails{" +
                "detailIndex=" + detailIndex +
                ", detailType=" + detailType +
                ", commodityCode='" + commodityCode + '\'' +
                ", goodsName='" + goodsName + '\'' +
                ", withTaxFlag=" + withTaxFlag +
                ", goodsPrice=" + goodsPrice +
                ", taxFreePrice=" + taxFreePrice +
                ", goodsNum=" + goodsNum +
                ", taxrate='" + taxrate + '\'' +
                ", specType='" + specType + '\'' +
                ", goodsUnit='" + goodsUnit + '\'' +
                ", goodsCode='" + goodsCode + '\'' +
                ", selfCode='" + selfCode + '\'' +
                ", favouredPolicyFlag=" + favouredPolicyFlag +
                ", favouredPolicyName='" + favouredPolicyName + '\'' +
                ", zeroRateFlag=" + zeroRateFlag +
                ", deduction=" + deduction +
                ", taxFreeAmount=" + taxFreeAmount +
                ", tax=" + tax +
                ", taxAmount=" + taxAmount +
                ", favouredPolicyCode='" + favouredPolicyCode + '\'' +
                ", goodsCodeAbb='" + goodsCodeAbb + '\'' +
                ", columnFirst='" + columnFirst + '\'' +
                ", columnSecond='" + columnSecond + '\'' +
                ", columnThree='" + columnThree + '\'' +
                ", columnFour='" + columnFour + '\'' +
                ", columnFive='" + columnFive + '\'' +
                ", mtzl='" + mtzl + '\'' +
                '}';
    }
}
